home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / gtk-2.0 / demo / panes.c < prev    next >
Encoding:
C/C++ Source or Header  |  2006-04-25  |  5.7 KB  |  195 lines

  1. /* Paned Widgets
  2.  *
  3.  * The GtkHPaned and GtkVPaned Widgets divide their content
  4.  * area into two panes with a divider in between that the
  5.  * user can adjust. A separate child is placed into each
  6.  * pane.
  7.  *
  8.  * There are a number of options that can be set for each pane.
  9.  * This test contains both a horizontal (HPaned) and a vertical
  10.  * (VPaned) widget, and allows you to adjust the options for
  11.  * each side of each widget.
  12.  */
  13.  
  14. #include <gtk/gtk.h>
  15.  
  16. void
  17. toggle_resize (GtkWidget *widget,
  18.            GtkWidget *child)
  19. {
  20.   GtkPaned *paned = GTK_PANED (child->parent);
  21.   gboolean is_child1 = (child == paned->child1);
  22.   gboolean resize, shrink;
  23.  
  24.   resize = is_child1 ? paned->child1_resize : paned->child2_resize;
  25.   shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
  26.  
  27.   gtk_widget_ref (child);
  28.   gtk_container_remove (GTK_CONTAINER (child->parent), child);
  29.   if (is_child1)
  30.     gtk_paned_pack1 (paned, child, !resize, shrink);
  31.   else
  32.     gtk_paned_pack2 (paned, child, !resize, shrink);
  33.   gtk_widget_unref (child);
  34. }
  35.  
  36. void
  37. toggle_shrink (GtkWidget *widget,
  38.            GtkWidget *child)
  39. {
  40.   GtkPaned *paned = GTK_PANED (child->parent);
  41.   gboolean is_child1 = (child == paned->child1);
  42.   gboolean resize, shrink;
  43.  
  44.   resize = is_child1 ? paned->child1_resize : paned->child2_resize;
  45.   shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
  46.  
  47.   gtk_widget_ref (child);
  48.   gtk_container_remove (GTK_CONTAINER (child->parent), child);
  49.   if (is_child1)
  50.     gtk_paned_pack1 (paned, child, resize, !shrink);
  51.   else
  52.     gtk_paned_pack2 (paned, child, resize, !shrink);
  53.   gtk_widget_unref (child);
  54. }
  55.  
  56. GtkWidget *
  57. create_pane_options (GtkPaned     *paned,
  58.              const gchar *frame_label,
  59.              const gchar *label1,
  60.              const gchar *label2)
  61. {
  62.   GtkWidget *frame;
  63.   GtkWidget *table;
  64.   GtkWidget *label;
  65.   GtkWidget *check_button;
  66.   
  67.   frame = gtk_frame_new (frame_label);
  68.   gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
  69.   
  70.   table = gtk_table_new (3, 2, TRUE);
  71.   gtk_container_add (GTK_CONTAINER (frame), table);
  72.   
  73.   label = gtk_label_new (label1);
  74.   gtk_table_attach_defaults (GTK_TABLE (table), label,
  75.                  0, 1, 0, 1);
  76.   
  77.   check_button = gtk_check_button_new_with_mnemonic ("_Resize");
  78.   gtk_table_attach_defaults (GTK_TABLE (table), check_button,
  79.                  0, 1, 1, 2);
  80.   g_signal_connect (check_button, "toggled",
  81.             G_CALLBACK (toggle_resize), paned->child1);
  82.   
  83.   check_button = gtk_check_button_new_with_mnemonic ("_Shrink");
  84.   gtk_table_attach_defaults (GTK_TABLE (table), check_button,
  85.                  0, 1, 2, 3);
  86.   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
  87.                    TRUE);
  88.   g_signal_connect (check_button, "toggled",
  89.             G_CALLBACK (toggle_shrink), paned->child1);
  90.   
  91.   label = gtk_label_new (label2);
  92.   gtk_table_attach_defaults (GTK_TABLE (table), label,
  93.                  1, 2, 0, 1);
  94.   
  95.   check_button = gtk_check_button_new_with_mnemonic ("_Resize");
  96.   gtk_table_attach_defaults (GTK_TABLE (table), check_button,
  97.                  1, 2, 1, 2);
  98.   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
  99.                    TRUE);
  100.   g_signal_connect (check_button, "toggled",
  101.             G_CALLBACK (toggle_resize), paned->child2);
  102.   
  103.   check_button = gtk_check_button_new_with_mnemonic ("_Shrink");
  104.   gtk_table_attach_defaults (GTK_TABLE (table), check_button,
  105.                  1, 2, 2, 3);
  106.   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
  107.                    TRUE);
  108.   g_signal_connect (check_button, "toggled",
  109.             G_CALLBACK (toggle_shrink), paned->child2);
  110.  
  111.   return frame;
  112. }
  113.  
  114. GtkWidget *
  115. do_panes (GtkWidget *do_widget)
  116. {
  117.   static GtkWidget *window = NULL;
  118.   GtkWidget *frame;
  119.   GtkWidget *hpaned;
  120.   GtkWidget *vpaned;
  121.   GtkWidget *button;
  122.   GtkWidget *vbox;
  123.  
  124.   if (!window)
  125.     {
  126.       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  127.       gtk_window_set_screen (GTK_WINDOW (window),
  128.                  gtk_widget_get_screen (do_widget));
  129.  
  130.       g_signal_connect (window, "destroy",
  131.             G_CALLBACK (gtk_widget_destroyed), &window);
  132.  
  133.       gtk_window_set_title (GTK_WINDOW (window), "Panes");
  134.       gtk_container_set_border_width (GTK_CONTAINER (window), 0);
  135.  
  136.       vbox = gtk_vbox_new (FALSE, 0);
  137.       gtk_container_add (GTK_CONTAINER (window), vbox);
  138.       
  139.       vpaned = gtk_vpaned_new ();
  140.       gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
  141.       gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
  142.  
  143.       hpaned = gtk_hpaned_new ();
  144.       gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
  145.  
  146.       frame = gtk_frame_new (NULL);
  147.       gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
  148.       gtk_widget_set_size_request (frame, 60, 60);
  149.       gtk_paned_add1 (GTK_PANED (hpaned), frame);
  150.       
  151.       button = gtk_button_new_with_mnemonic ("_Hi there");
  152.       gtk_container_add (GTK_CONTAINER(frame), button);
  153.  
  154.       frame = gtk_frame_new (NULL);
  155.       gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
  156.       gtk_widget_set_size_request (frame, 80, 60);
  157.       gtk_paned_add2 (GTK_PANED (hpaned), frame);
  158.  
  159.       frame = gtk_frame_new (NULL);
  160.       gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
  161.       gtk_widget_set_size_request (frame, 60, 80);
  162.       gtk_paned_add2 (GTK_PANED (vpaned), frame);
  163.  
  164.       /* Now create toggle buttons to control sizing */
  165.  
  166.       gtk_box_pack_start (GTK_BOX (vbox),
  167.               create_pane_options (GTK_PANED (hpaned),
  168.                            "Horizontal",
  169.                            "Left",
  170.                            "Right"),
  171.               FALSE, FALSE, 0);
  172.  
  173.       gtk_box_pack_start (GTK_BOX (vbox),
  174.               create_pane_options (GTK_PANED (vpaned),
  175.                            "Vertical",
  176.                            "Top",
  177.                            "Bottom"),
  178.               FALSE, FALSE, 0);
  179.  
  180.       gtk_widget_show_all (vbox);
  181.     }
  182.  
  183.   if (!GTK_WIDGET_VISIBLE (window))
  184.     {
  185.       gtk_widget_show (window);
  186.     }
  187.   else
  188.     {
  189.       gtk_widget_destroy (window);
  190.       window = NULL;
  191.     }
  192.  
  193.   return window;
  194. }
  195.